package nextel.ruta.rms;

import javax.microedition.rms.RecordEnumeration;
import nextel.ruta.bean.RutaBean;
import nextel.util.mvc.BuscarListener;
import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Iterator;
import pe.com.nextel.util.List;

/**
 * Persiste el usuario de ingreso al sistema
 * @author eespinoza
 */
public class RMSRuta extends GestorRMS {
    
    RutaBean ruta = new RutaBean();
    /**
     * Constructor del RMSUSuario
     */
    public RMSRuta() {
        // nombrel recordStore
        super("RMS_RUTA");
    }
    
    /**
     * Crea un Objeto que maneja el recordStore
     * @return
     */
    protected Persistente createObjectBean() {
        return ruta;
    }
    
    //solo se debe usar cuando la configuracion de actividades se deshabilite
    //si no se muere por memoria
    public RutaBean obtenerPrimeraRuta() throws Exception{
        List lista = this.getAllLista();
        return (lista != null && lista .size() > 0 ) ? (RutaBean)lista .get(0): null;
    }

    public synchronized void buscarPorRutas(BuscarListener listener) throws Exception {
        try {

            abrirRS();
            
            List lista = new ArrayList();
            
            int i = 0;
    //            StringUtils.getStaticsMemoria();
            
           // System.out.println("getNumRecords()=" + getNumRecords() +"|listener.esFinalizadaBusqueda="+listener.esFinalizadaBusqueda( ));
            
            for(int id=1 ; id<= getNumRecords() && !listener.esFinalizadaBusqueda( ); id++){

                Iterator it = getRecordList(id).iterator();

                while (it.hasNext() && !listener.esFinalizadaBusqueda( )) {

                    RutaBean bean = (RutaBean) it.next();
                    
                   // System.out.println("nombre=="+ bean.getCampoMostrar( ) + "|idRecord=" + id);
                    
//                    System.out.println( "[ID]" +id+ "[POS]" +bean.getPosicionID( ) +"["+ bean.nombre +"]" + bean.rutaActiva() + "|" + bean.noVisita);

                    if (bean.rutaActiva() && bean.noVisita == 0) {
                        bean.setIdRecodset(id);
                        lista.add(bean);
                        i++;
                    }

                    bean = null;

                    if ((i % 5 == 0) && !lista.isEmpty()) {
                        listener.agregarElementosVectorDatos(lista);
                        lista.clear();
                        System.gc();
                    }
                }

                if (!lista.isEmpty()) {
                    listener.agregarElementosVectorDatos(lista);
                    lista.clear();
                    System.gc();
                }
            }

            if (listener != null) {
                listener.finalizo();
            }

            lista = null;
            System.gc();

        } finally {

            cerrarRS();
        }
    }
    
    public synchronized void buscarNOVisita(BuscarListener listener) throws Exception {
        try {

            abrirRS();
            
            List lista = new ArrayList();
            
            int i = 0;
    //            StringUtils.getStaticsMemoria();
            
           // System.out.println("getNumRecords()=" + getNumRecords() +"|listener.esFinalizadaBusqueda="+listener.esFinalizadaBusqueda( ));
            
            for(int id=1 ; id<= getNumRecords() && !listener.esFinalizadaBusqueda( ); id++){

                Iterator it = getRecordList(id).iterator();

                while (it.hasNext() && !listener.esFinalizadaBusqueda( )) {

                    RutaBean bean = (RutaBean) it.next();

                    if (bean.noVisita == 1) {
                        bean.setIdRecodset(id);
                        lista.add(bean);
                        i++;
                    }

                    bean = null;

                    if ((i % 5 == 0) && !lista.isEmpty()) {
                        listener.agregarElementosVectorDatos(lista);
                        lista.clear();
                        System.gc();
                    }
                }

                if (!lista.isEmpty()) {
                    listener.agregarElementosVectorDatos(lista);
                    lista.clear();
                    System.gc();
                }
            }

            if (listener != null) {
                listener.finalizo();
            }

            lista = null;
            System.gc();

        } finally {

            cerrarRS();
        }
    }

}
